#include<iostream>
#include<memory>
//1
class Test
{
public:
    Test()
    {
        std::cout<<"构建函数\n";
    }
    ~Test()
    {
        std::cout<<"析构函数\n";
    }
    void show()
    {
      std::cout<<"hello"<<std::endl;  
    }
};

// template<typename T>
// class SmartPoint
// {
//     public:
//        SmartPoint(T*p):p(p){};
//        ~SmartPoint()
//        {
//         delete P;
//        }
//     private:
//         T*P;
// };
// using IntPtr=std::unique_ptr<int>;
// class T
// {
//     T():a(std::make_unique<int)(10)
//     {

//     }



// private:
//     IntPtr a;
// }

int main()
{
    //独占指针（把拷贝构造函数和赋值运算符重载删除了）不能把对象给别人t=t1是不允许的。
    std::unique_ptr<Test> t=std::make_unique<Test>();//独占指针名为指针，实际上是个对象
   // SmartPoint<Test> p(new Test);
   t->show();//对象可以用->,用的是运算符重载
    Test*p=t.get();//获取裸指针
    //不要去拿裸指针，可能会出现二次释放
    //智能指针和裸指针不能混用


    return 0;
}